<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

<script>
// let关键字，用于声明变量（类似于var）

var a = 123;
let b = 456;

// 1.let不允许重复声明变量
// let a = 666;// 报错
// let b = 777;// 报错
// var a = 888;
// var b = 999;// 报错

// 2.let声明的变量不会添加到window对象中（在自身执行上下文）
// console.log( window.a );// 123
// console.log( window.b );// undefined

// 3.let声明的变量会形成块级作用域 {代码块}
// if (123) {
//     var abc = 123;// 全局变量
// } else {
//     var abc = 456;// 全局变量
// }
// console.log( abc );// 123

// if (123) {// 块级作用域
//     let abc = 123;
// } else {// 块级作用域
//     let abc = 456;
// }
// console.log( abc );// 报错


// for (var i = 0; i < 3; i++) {
//     console.log( 'hello' );
// }
// console.log( i );// 3

// for (let i = 0; i < 3; i++) {// 块级作用域
//     console.log( 'hello' );
// }
// console.log( i );// 报错

// 4.let声明的变量不会提升
// console.log( num1 );// undefined
// var num1 = 123;

// console.log( num2 );// 报错
// let num2 = 456;

// 5.let不能声明和形参重名的变量
// function fn(name){
//     var name = '李四';
//     console.log( name );// 李四
// }
// fn('张三');

function fn(name){
    let name = '李四';// 报错
    console.log( name );
}
fn('张三');

</script>
</body>
</html>